package cliente;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.ButtonGroup;
import javax.swing.ButtonModel;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JToggleButton;
import javax.swing.border.EmptyBorder;

import java.awt.CardLayout;

import javax.swing.JButton;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Font;

import javax.swing.JLabel;

import java.awt.Color;
import java.io.IOException;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

import javax.swing.JRadioButton;

import excepciones.VariablePlacaEnEstadoOFFException;
import excepciones.VariablePlacaNoExisteException;
import utilidad.SocketManager;

public class VentanaElegirAccion extends JFrame {

	private JPanel contentPane;
	private JFrame estaVentana;
	private ButtonGroup bg;
	private ArrayList<JRadioButton> listabotones= new ArrayList<JRadioButton>();
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					VentanaElegirAccion frame = new VentanaElegirAccion();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public VentanaElegirAccion(ArrayList<String> lineastemp, final SocketManager sm, final PanelListado pl) {
		estaVentana=this;
		setTitle(".:: Sistema Seguridad: Elegir acci\u00F3n ::.");
		
		setBounds(100, 100, 450, 301);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JButton btnSeleccionarAccion = new JButton("Seleccionar Acci\u00F3n");
		btnSeleccionarAccion.setFont(new Font("Times New Roman", Font.BOLD, 14));
		btnSeleccionarAccion.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				//�Como puedo cerrar esta ventana antes de que aparezca la otra?
				dispose();
				int i;
				for(i=0; i<listabotones.size();i++)
				{
					if(listabotones.get(i).isSelected())
					{
						break;
					}
				}
				String eleccion=listabotones.get(i).getText();
				System.out.println("[ELECCION]   "+eleccion);
				
				//realizo el envio al servidor
				String codigo = "";
				String sentenciaAEnviar = "ACCION " + VentanaPrincipal.placaAccion+" "+VentanaPrincipal.variableAccion+" "+eleccion;
				System.out.println("Sentencia enviada:" + sentenciaAEnviar);
				try {
					try{
						sm.Escribir(sentenciaAEnviar + '\n');
						}
						catch(SocketException e)
						{
							JOptionPane.showMessageDialog(null, "Parece que el administrador del servidor le ha cerrado la conexión. Intente conectarse más tarde.", "¡Ups!", JOptionPane.ERROR_MESSAGE);
						}
					
					String sentenciaRecibida = sm.Leer();
					System.out.println(sentenciaRecibida);
					StringTokenizer token = new StringTokenizer(sentenciaRecibida);
					codigo = token.nextToken();
					System.out.println(codigo);
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				if(codigo.equals("205"))
				{
					VentanaConfirmarAccion vCA = new VentanaConfirmarAccion(eleccion, sm, pl);
					vCA.setVisible(true);
				}
				else
				{
					if(codigo.equals("407"))
					{
						try {
							throw new VariablePlacaNoExisteException();
						} catch (VariablePlacaNoExisteException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}
					else
					{
						if(codigo.equals("408"))
						{
							try {
								throw new VariablePlacaEnEstadoOFFException();
							} catch (VariablePlacaEnEstadoOFFException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
						}
						else
						{
							System.out.println("[ERROR ACCION]      Estado de la placa OFF");
								JOptionPane.showMessageDialog(null, "La placa está desactivada. No se pueden realizar acciones sobre ella.", "¡Ups!", JOptionPane.ERROR_MESSAGE);
						}
					}
				}
				
			}
		});
		btnSeleccionarAccion.setBounds(75, 217, 160, 30);
		contentPane.add(btnSeleccionarAccion);
		
		JButton btnVolver = new JButton("Volver");
		btnVolver.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				estaVentana.dispose();
			}
		});
		btnVolver.setFont(new Font("Times New Roman", Font.BOLD, 14));
		btnVolver.setBounds(255, 217, 95, 30);
		contentPane.add(btnVolver);
		
		JLabel lblElegirAccinSobre = new JLabel("Elegir acci\u00F3n sobre variable "+ VentanaPrincipal.variableAccion);
		lblElegirAccinSobre.setForeground(Color.BLUE);
		lblElegirAccinSobre.setFont(new Font("Times New Roman", Font.BOLD, 14));
		lblElegirAccinSobre.setBounds(40, 22, 320, 30);
		contentPane.add(lblElegirAccinSobre);
		bg= new ButtonGroup();
		for(int i=0; i<lineastemp.size() && !(lineastemp.get(i).equals("202 FINACCIONES"));i++)
		{
			JRadioButton rdbtnNewRadioButton1 = new JRadioButton(lineastemp.get(i));
			rdbtnNewRadioButton1.setBounds(75, 70+(25*i), 300, 30);
			bg.add(rdbtnNewRadioButton1);
			listabotones.add(rdbtnNewRadioButton1);
			contentPane.add(rdbtnNewRadioButton1);		
		}
		setUndecorated(true);
		setLocationRelativeTo(null);
		setVisible(true);
		setResizable(false);
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
	}

	public VentanaElegirAccion() {
		// TODO Auto-generated constructor stub
		
	}
}
